


// import RinzzWrapper from "../../RinzzWrapper/RinzzWrapper";
// import { RinzzAnalysis } from "../../RinzzWrapper/RinzzAnalysis/RinzzAnalysis";
// import { RinzzConfig } from "../../RinzzWrapper/Common/RinzzConfig";
import { UtilsModule_blxf } from "../Module/UtilsModule";
import AudioModule_blxf from "../Module/AudioModule";
import GameData_blxf from "../GameData/GameData";
import { EnumManager_blxf } from "./EnumManager";
// import OpenDataContext_blxf from "../Platform/openDataContext_wx";
import { CsvManager_blxf } from "./CsvManager";
import { ConfigModule_blxf } from "../Module/ConfigModule";
import PageManager_blxf from "./PageManager";


const { ccclass, property } = cc._decorator;

/** 平台管理器 */

@ccclass
export class PlatformManager_blxf {

    private constructor() { }

    private static platformManager_blxf: PlatformManager_blxf = new PlatformManager_blxf();

    public static get instance() {
        return this.platformManager_blxf;
    }

    @property({ tooltip: '是否抖音平台' })
    _isTT : boolean = false;

    /** 获取平台类型 */
    static getPlatformType () {
        // return RinzzWrapper.getPlatformName( cc.sys.platform );
    }

    /**
     * 检测平台
     * @param checkPlatformId 检测平台id
     * @returns 
     */
    onCheckPlatform ( checkPlatformId: number ) {
        // let _platformId = this.getPlatformType();
        // let _isCheck = checkPlatformId != 2 || _platformId == 'dy_game';
        // return _isCheck && Config.platformId == checkPlatformId;
    }

    /** 初始化管理器 */
    initManager_blxf ( cb: any = ()=>{} ) {
        // let isTestWechatGame = cc.sys.platform == cc.sys.WECHAT_GAME;
        // if (cc.sys.isBrowser) return cb && cb();

        // RinzzWrapper.initWarapper(() => {
        //     // Config.platformId == 2 && this.onRealNameAuthentication();

        //     cb && cb();
        //     UtilsModule_blxf.instance.Log_blxf('平台管理器初始化成功！');
        // }, {
        //     _stopRecordVideoCB : this.onStopRecordVideoCB_blxf.bind(this),
        //     _showGameCB        : this.onShowGameCB_blxf.bind(this),
        //     _shareFailCB       : this.onShareFailCB_blxf.bind(this),
        //     _onLoadPageCB      : this.onLoadPageCB.bind(this),
        // });

        // // tt.sdk 初始化
        // this.initSDK_blxf();
    }

    /** 初始化SDK */
    async initSDK_blxf () {
        this._isTT = ConfigModule_blxf.isTtPlatform_blxf();

        // if ( this._isTT ) {
        //     zs_sdk && zs_sdk.zs_network && await zs_sdk.zs_network.init();
        //     UtilsModule_blxf.instance.Log_blxf( 'tt sdk init success' );
        // }
    }

    /**
     * 观看视频
     * @param cb 视频回调
     * @param isFree 是否免费
     * @param isResumeBGM 是否恢复背景音乐
     */
    onPlayVideo_blxf ( cb: any, isFree = false, isResumeBGM = true, btnType: number = -1 ) {
        if ( !cb ) return UtilsModule_blxf.instance.Log_blxf('观看视频接口没有回调函数', 2);

        // cc.game.emit('onUpdateVideoMask', true);
        if ( cc.sys.isBrowser || isFree || true ) {
            // cc.game.emit('onUpdateVideoMask', false);
            UtilsModule_blxf.instance.onInitBuffData_blxf( true );
            return cb();
        }

        // // return UtilsModule_blxf.onTips_blxf( '暂无视频，请稍后再试！' );

        // // 头条
        // let _isTT = this._isTT //&& zs_sdk && zs_sdk.zs_dyzt;

        // AudioModule_blxf.instance.stopBgm_blxf();
        // // cc.game.pause();
        // RinzzWrapper.mChannelAdapter.showVideoAd((res) => {
        //     cc.game.emit('onUpdateVideoMask', false);

        //     // cc.game.resume();
        //     isResumeBGM && AudioModule_blxf.instance.resumeBgm_blxf();

        //     // 暂无视频
        //     if (res == -1) return UtilsModule_blxf.onTips_blxf( '暂无视频，请稍后再试！' );

        //     // 未播放完
        //     if (Number(res) == 0) {
        //        // _isTT && zs_sdk.zs_dyzt.checkVideoReport(false);
        //         return;
        //     }

        //     cb();

        //     UtilsModule_blxf.instance.onInitBuffData_blxf( true );

        //     // 视频埋点
        //     UtilsModule_blxf.instance.onVideoReportEvent_blxf();
        //     UtilsModule_blxf.instance.onCompleteVideoReportEvent_blxf();

        //     UtilsModule_blxf.onBtnTypeReportEvent_blxf( btnType );

        //     //_isTT && zs_sdk.zs_dyzt.checkVideoReport(true);
        // });
    }

    /**
     * 游戏埋点事件
     * @param eventType 事件类型（0：普通用户，1：新用户）
     * @param eventId   事件id
     * @param options   多参数类型
     */
    onGameEvent_blxf (eventType = 0, id, options) {
        // if (id === undefined) return cc.warn(`游戏埋点事件未传参数`);

        // let _csvName = 'GameEvent';
        // // if ( Config.platformId == 2 ) {
        //     _csvName = 'GameEvent_tt';
        // // }
        // let gameEventData = Utils.onCsvCfgData(_csvName);
        // let eventData = gameEventData.find(item => item.ID == id);
        // if (!eventData) return cc.warn(`未找到埋点事件id=${id}相关配置`);

        // let { EventId, EventDes, EventName } = eventData;
        // if (EventId == '') return cc.warn(`游戏埋点事件id=${id}的EventId参数未配置`);

        // let jsonMapEvent = '';
        // if (id == 70) jsonMapEvent = JSON.stringify(options);

        // if ( Config.platformId == 2 ) {
        //     this.onReportAnalytics( EventId, options, EventName );
        // } else {
        //     // 海外
        //     if ( Config.fontType == 2 ) EventDes = EventId;
        //     // 上报埋点事件
        //     RinzzAnalysis.onEvent(EventId, EventDes, jsonMapEvent);
        // }
        // // 保存新用户已上报埋点事件
        // eventType == 1 && GameData.addUserNewEvent(id);

        // cc.log('埋点事件 ==>', eventType, id, EventId, EventName, EventDes, jsonMapEvent);
    }

    /**
     * 上报自定义事件
     * @param eventId 事件id
     * @param eventOptions 事件参数
     */
    onReportEvent_blxf ( eventId: number, eventOptions: any, eventType: number ) {
        if ( !eventId ) return UtilsModule_blxf.instance.Log_blxf(`上报自定义事件未传参数`);

        let _eventData: any = CsvManager_blxf.instance.getReportEventData_blxf( `${eventId}` );
        if ( !_eventData ) return;

        let { EventId, BranchId, EventType, SceneName, BranchMsg } = _eventData;
        if ( !EventId ) return;

        this.onMethod_blxf('onReportEvent_blxf', [ EventId, eventOptions ]);

        eventType == 1 && GameData_blxf.instance.addReportEventId_blxf( eventId );

        UtilsModule_blxf.instance.Log_blxf(`上报自定义事件成功 SceneName ==> ${ SceneName } & ${ eventOptions } & ${BranchMsg}`, -1);
    }

    /**
     * 加载报错信息
     * @param errorType 报错类型
     * @param errorDes 报错信息
     * @returns 
     */
    onEventError_blxf (errorType = '1', errorDes = '') {
        if (!errorDes) return cc.warn(`游戏报错未传参数`);
        
        // RinzzAnalysis.onEventError(errorType, errorDes);
    }

    /** 短震动 */
    onVibrateShort_blxf () {
        this.onMethod_blxf( 'shake' );
    }

    /** 长震动 */
    onVibrateLong_blxf () {
        this.onMethod_blxf( 'onVibrateLong' );
    }

    /** 按钮分享 */
    onShareAppMessage_blxf ( options: any ) {
        this.onMethod_blxf( 'shareAppMessage', [ options ] );
    }

    /** 调用方法 */
    onMethod_blxf ( _methodName, _options: any[] = [] ) {
        // let _isCheck = this.onCheckPlatformMethod_blxf( _methodName );
        // if ( !_isCheck ) return;

        // RinzzWrapper.mChannelAdapter[ _methodName ]( ..._options );
    }

    /**
     * 分享
     * @param data 
     */
    onShare_blxf (data = { shareTitle: '分享主题', shareText: '分享内容', imagePath: '分享的图片路径', shareUrl: '分享链接', cb: ( isOk: boolean )=>{}}) {
        cc.log('onShare data =>', data);
        let { shareTitle, shareText, imagePath, shareUrl, cb } = data;
        if (!shareText || !imagePath || !cb) return console.warn('分享参数错误 ==>', data);

        let isTestWechatGame = cc.sys.platform == cc.sys.WECHAT_GAME;
        if (cc.sys.isBrowser || isTestWechatGame) return cb(true);

        // RinzzWrapper.mChannelAdapter.shareToSystem(shareTitle, shareText, imagePath, shareUrl, cb);
    }

    /** 实名认证 */
    onRealNameAuthentication_blxf () {
        // let _isAuto = GameData.getRealNameAuthentication();
        // if ( _isAuto ) return;

        // let _completeCB = ()=>{
        //     console.log('已完成实名认证 <<>>')
        //     GameData.setRealNameAuthentication();
        // }
        // if (cc.sys.isBrowser || RinzzConfig.isTest) {
        //     return _completeCB();
        // }

        // RinzzWrapper.mChannelAdapter.onRealNameAuthentication(()=>{
        //     _completeCB();
        // });
    }

    /**
     * 开始录屏
     */
    onStartRecordVideo_blxf () {
        // if (cc.sys.isBrowser || RinzzConfig.isTest) return;

        // RinzzWrapper.mChannelAdapter.recorderStart(300);
    }

    /** 停止录屏 */
    onStopRecordVideo_blxf () {
        // if (cc.sys.isBrowser || RinzzConfig.isTest) return;
        // RinzzWrapper.mChannelAdapter.recordStop();
    }

    /** 分享录屏 */
    onShareRecordVideo_blxf (cb) {
        // if ( !cb ) return cc.warn('分享录屏参数错误!!');

        // if (cc.sys.isBrowser || RinzzConfig.isTest) return cb && cb(true);

        // let _templateId = '6ej3f10fggcd37xwt5', _desc = '填满菜篮子，生鲜大亨就是你', _videoTopics = '八零小贩';
        // let _callback = (res) =>{
        //     cb && cb(res);
        // }
        // RinzzWrapper.mChannelAdapter.onShareVideo(_templateId, _desc, _videoTopics, _callback);
    }

    /** 停止录屏回调 */
    onStopRecordVideoCB_blxf () {

        cc.game.emit('onStopRecordVideoCB_blxf');
    }

    /** 检测平台方法是否定义 */
    onCheckPlatformMethod_blxf ( methodName: string ) {
        // if ( !RinzzWrapper ) return;
        // if ( !RinzzWrapper.mChannelAdapter ) return;
        // if ( !RinzzWrapper.mChannelAdapter[methodName] ) return console.warn('平台方法未定义: ', methodName);

        // return true;
    }

    /** 自定义事件上报 */
    onReportAnalytics_blxf ( eventId, eventData = {}, _eventName ) {
        // cc.log('埋点事件 ==>', eventId, _eventName, eventData);

        // if ( !eventId || typeof(eventId) != 'string' ) {
        //     return cc.warn('onReportAnalytics 参数错误 >>');
        // }

        // let _methodName = 'onReportAnalytics';
        // let _isCheck = this.onCheckPlatformMethod_blxf( _methodName );
        // if ( !_isCheck ) return;

        // RinzzWrapper.mChannelAdapter[ _methodName ]( eventId, eventData );

        // console.log('埋点事件 ==>', eventId, _eventName, eventData);
    }

    /** 确认当前宿主版本是否支持跳转某个小游戏入口场景 */
    onCheckScene_blxf ( scene = 'sidebar' ) {
        // let _methodName = 'onCheckScene';
        // let _isCheck = this.onCheckPlatformMethod_blxf( _methodName );
        // if ( !_isCheck ) return;

        // RinzzWrapper.mChannelAdapter[ _methodName ]( ( isExist: boolean )=>{

        //     let _isSiderbar = scene == 'sidebar';
        //     _isSiderbar && !isExist && GameData_blxf.instance.setSidebarTTRewardState_blxf(-1);

        // }, scene);
    }

    /** 自动跳转至侧边栏 */
    onNavigateToScene_blxf () {
        // let _methodName = 'onNavigateToScene';
        // let _isCheck = this.onCheckPlatformMethod_blxf( _methodName );
        // if ( !_isCheck ) return;

        // RinzzWrapper.mChannelAdapter[ _methodName ]();
    }

    /** 小游戏回到前台的事件回调 */
    onShowGameCB_blxf ( res: any = {} ) {
        let { isSidebar } = res;

        // 侧边栏进入游戏
        if ( isSidebar ) {
            GameData_blxf.instance.setSidebarTTRewardState_blxf(1);
        }
    }

    /**
     * 创建授权按钮
     * @param btnNode 按钮节点
     * @param createCB 创建回调
     * @param tapCB 点击回调
     */
    createAuthorizeBtn_blxf ( btnType: number, btnNode: cc.Node, createCB: any, tapCB: any ) {
        // let _platformName: string = PlatformManager_blxf.getPlatformType();
        // let { PLATFORM_WECHAT } = EnumManager_blxf.platformType;

        // switch ( _platformName ) {
        //     case PLATFORM_WECHAT :
        //         // OpenDataContext_blxf.createAuthorizeBtn_blxf( 
        //         //     btnType, btnNode,
        //         //     // 创建授权按钮回调
        //         //     ( btnAuthorize: any )=>{
        //         //         createCB && createCB( btnAuthorize );
        //         //     },
        //         //     // 点击授权按钮回调
        //         //     ( isAuthorize: boolean ) =>{
        //         //         tapCB && tapCB( isAuthorize );
        //         //     }
        //         // );
        //         break;
        // }  
    }

    /** 登录 */
    login_blxf ( callback: any ) {
        // if ( cc.sys.isBrowser || RinzzConfig.isTest ) {
        //     return callback && callback();
        // }

        // this.onMethod_blxf( 'login', [ callback ] );
    }

    /** 检测是否授权 */
    onCheckIsAuthorize_blxf ( callback: any ) {
        // if ( cc.sys.isBrowser || RinzzConfig.isTest ) {
        //     return callback && callback();
        // }

        // this.onMethod_blxf( 'onCheckIsAuthorize_blxf', [ callback ] );
    }

    /** 播放音效 */
    playAudio_blxf ( nativeUrl: string ) {
        this.onMethod_blxf( 'playAudio_blxf', [ nativeUrl ]);
    }

    /**
     * 更新玩家财富值
     * @param num 财富值
     */
    async updateWealthNum_blxf ( num: number ) {
        if ( !num || num < 0 ) return UtilsModule_blxf.instance.Log_blxf([ `updateWealthNum_blxf 参数错误 >>`, num ]) ;
    }

    /**
     * 获取财富榜
     */
    async getWealthDataList_blxf () {

    }

    /**
     * 获取玩家财富榜排名数据
     */
    async getUserWealthRankData_blxf () {

    }

    /** 分享失败回调 */
    onShareFailCB_blxf () {
        let { TIPS_SHARE_FAIL } = EnumManager_blxf.tipsType;
        UtilsModule_blxf.onTips_blxf( TIPS_SHARE_FAIL );
    }

    /**
     * 加载页回调
     * @param isLoad 是否加载（加载 或 关闭） 
     */
    onLoadPageCB ( isLoad: boolean ) {
        if ( !isLoad ) {
            cc.game.emit('onOffLoadPage_blxf');
        } else {
            PageManager_blxf.instance.loadLoadPage_blxf();
        }
    }
}
